package pe.gob.osce.sirenas.svc;

import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.apache.log4j.Logger;

import pe.gob.osce.sirenas.dao.AreaProfesionDAOLocal;
import pe.gob.osce.sirenas.dao.CentroEstudiosDAOLocal;
import pe.gob.osce.sirenas.dao.DistritoDAOLocal;
import pe.gob.osce.sirenas.dao.EstadoDAOLocal;
import pe.gob.osce.sirenas.dao.MateriaControversiaDAOLocal;
import pe.gob.osce.sirenas.dao.MotivoDAOLocal;
import pe.gob.osce.sirenas.dao.PaisDAOLocal;
import pe.gob.osce.sirenas.dao.ParametrosDAOLocal;
import pe.gob.osce.sirenas.dao.ProvinciaDAOLocal;
import pe.gob.osce.sirenas.dao.RegionDAOLocal;
import pe.gob.osce.sirenas.dao.ViaDAOLocal;
import pe.gob.osce.sirenas.dao.ZonaDAOLocal;
import pe.gob.osce.sirenas.dao.convert.AuditoriaConvert;
import pe.gob.osce.sirenas.dao.convert.ParametrosConvert;
import pe.gob.osce.sirenas.model.AreaProfesionDTO;
import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.CentroEstudiosDTO;
import pe.gob.osce.sirenas.model.DistritoDTO;
import pe.gob.osce.sirenas.model.EstadoDTO;
import pe.gob.osce.sirenas.model.MateriaControversiaDTO;
import pe.gob.osce.sirenas.model.MotivoDTO;
import pe.gob.osce.sirenas.model.PaisDTO;
import pe.gob.osce.sirenas.model.ParametrosDTO;
import pe.gob.osce.sirenas.model.ProvinciaDTO;
import pe.gob.osce.sirenas.model.RegionDTO;
import pe.gob.osce.sirenas.model.ViaDTO;
import pe.gob.osce.sirenas.model.ZonaDTO;
import pe.gob.osce.sirenas.model.jpa.Parametros;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;
import pe.gob.osce.sirenas.util.NegocioException;


/**
 * Session Bean implementation class SolicitarInscripcionService
 */
@Stateless(mappedName = "ObtenerDatosComunesService")
public class ObtenerDatosComunesServiceImpl implements ObtenerDatosComunesServiceLocal {
	final static Logger log = Logger.getLogger(ObtenerDatosComunesServiceImpl.class);

	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
	@EJB
	private RegionDAOLocal regionDAOLocal;
	@EJB
	private ProvinciaDAOLocal provinciaDAOLocal;
	@EJB
	private DistritoDAOLocal distritoDAOLocal;

	@EJB
	private	ParametrosDAOLocal	parametrosDAOLocal;
	
	@EJB
	private	AreaProfesionDAOLocal	areaProfesionDAOLocal;
	
	@EJB
	private	PaisDAOLocal	paisDAOLocal;
	
	@EJB
	private	CentroEstudiosDAOLocal	centroEstudiosDAOLocal;
	
	@EJB
	private	MateriaControversiaDAOLocal	materiaControversiaDAOLocal;
	
	@EJB
	private	EstadoDAOLocal	estadoDAOLocal;

	@EJB
	private	MotivoDAOLocal	motivoDAOLocal;
	@EJB
	private	ZonaDAOLocal	zonaDAOLocal;
	@EJB
	private	ViaDAOLocal	viaDAOLocal;
	
	@Override
	public	List<MotivoDTO> obtenerListaMotivos()
			throws Exception {
		List<MotivoDTO> listarMotivos = null;
	
		try{
			listarMotivos=motivoDAOLocal.listarMotivos();			
		}  catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		return listarMotivos;
	}
	
	@Override
	public	List<RegionDTO> listarRegion()
			throws Exception {
		List<RegionDTO> listaRegion = null;
	
		try{
			listaRegion=regionDAOLocal.ListarRegion();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaRegion;
	}
		

	@Override
	public	List<ProvinciaDTO> listarProvincia(Long idRegion)
			throws Exception {
		List<ProvinciaDTO> listaProvincia = null;
	
		try{
			listaProvincia = provinciaDAOLocal.ListarProvincia(idRegion);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaProvincia;
	}
	

	@Override
	public	List<DistritoDTO> listarDistrito(Long idProvincia,Long idRegion)
			throws Exception {
		List<DistritoDTO> listaDistrito = null;
	
		try{
			listaDistrito = distritoDAOLocal.ListarDistrito(idProvincia,idRegion);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaDistrito;
	}
	

	@Override
	public	List<ParametrosDTO> obtenerListaParametros()
			throws Exception {
		List<ParametrosDTO> listaParametros= null;
	
		try{			
			listaParametros=parametrosDAOLocal.listarParametros();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaParametros;
	}

	@Override
	public	List<ParametrosDTO> obtenerListaParametrosPorPadre(Long idParametro)
			throws Exception {
		List<ParametrosDTO> listaParametros= null;
	
		try{			
			listaParametros=parametrosDAOLocal.listarParametrosPorPadre(idParametro);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaParametros;
	}
	@Override
	public	List<AreaProfesionDTO> obtenerListaAreaProfesion()
			throws Exception {
		List<AreaProfesionDTO> listaAreaProfesion= null;
	
		try{			
			listaAreaProfesion=areaProfesionDAOLocal.listarAreaProfesion();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaAreaProfesion;
	}
	
	@Override
	public	List<CentroEstudiosDTO> obtenerListaCentroEstudios()
			throws Exception {
		List<CentroEstudiosDTO> listaCentroEstudios= null;
	
		try{			
			listaCentroEstudios=centroEstudiosDAOLocal.listarCentroEstudios();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaCentroEstudios;
	}
	
	@Override
	public	List<PaisDTO> obtenerListaPais()
			throws Exception {
		List<PaisDTO> listaPais= null;
	
		try{			
			listaPais=paisDAOLocal.listarPais();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaPais;
	}
	
	
	@Override
	public	List<MateriaControversiaDTO> obtenerListaMateriaControversia()
			throws Exception {
		List<MateriaControversiaDTO> listaMateriaControversia= null;
	
		try{			
			listaMateriaControversia=materiaControversiaDAOLocal.listarMateriaControversia();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaMateriaControversia;
	}
	
	@Override
	public	List<EstadoDTO> obtenerListaEstado(Integer indIncidencia,Integer indUpdEstado)
			throws Exception {
		List<EstadoDTO> listaEstado= null;
	
		try{			
			listaEstado=estadoDAOLocal.listarEstado(indIncidencia,indUpdEstado);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaEstado;
	}

	@Override
	public	List<ViaDTO> obtenerListaVias() throws Exception {
		List<ViaDTO> listaVias= null;
	
		try{			
			listaVias=viaDAOLocal.listaVias();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaVias;
	}
	
	@Override
	public	List<ZonaDTO> obtenerListaZonas() throws Exception {
		List<ZonaDTO> listaZonas= null;
	
		try{			
			listaZonas=zonaDAOLocal.listaZonas();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaZonas;
	}

	@Override
	public void actualizarCorrelativo(ParametrosDTO parametrosDTO,AuditoriaDTO auditoriaDTO) throws Exception {

		try{
			Parametros parametrosJPA=null;
			parametrosJPA=ParametrosConvert.createParametrosJPA(parametrosDTO, AuditoriaConvert.createJPA(auditoriaDTO));				
			parametrosJPA=parametrosDAOLocal.actualizaCorrelativo(parametrosJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new NegocioException(propSirenas.getString(ConstanteEJB.EXC_NEGOCIO_PROCESO));
		}
	}
}
